﻿using System;
using System.Windows.Forms;
using hardvinyp.xrm;
using System.Collections.Generic;
using System.IO;

namespace SolutionExporterhardvin_y_p
{

    public partial class Inicio : Form
    {
        public Inicio()
        {
            InitializeComponent();
        }

        private void btnExportar_Click(object sender, EventArgs e)
        {
            if (lbDestino.Items.Count > 0)
            {
                bool administrada = rbAdmin.Checked;
                string tiposolucion = string.Empty;
                if (administrada)
                {
                    tiposolucion = "_Managed_";
                }
                else
                {
                    tiposolucion = "_Unmanaged_";
                }

                FolderBrowserDialog fbd = new FolderBrowserDialog();
                fbd.Description = "MYP -Selección de directorio para exportar las soluciones.";

                fbd.ShowDialog();
                if (fbd.SelectedPath != "")
                {
                    string directorio = fbd.SelectedPath + "\\";
                    SolutionEntity se = new SolutionEntity(Comunes.Conexion);

                    foreach (var item in lbDestino.Items)
                    {
                        // Vamos a exportar todas estas soluciones que hay en ese list box.

                        TESolution sol = (TESolution)item;
                        byte[] export = se.exportarsolucion(sol, administrada);
                        string filename = sol.Nombre + tiposolucion + "_"
                                          + DateTime.Now.ToString().Replace("/", "_").Replace(":", "_") + ".zip";

                        File.WriteAllBytes(directorio + filename, export);
                    }

                    // Guardamos todas las cadenas de conexion
                    Comunes communes = new Comunes();
                    communes.GuardarCadenaConexion();
                    MessageBox.Show("Se ha(n) exportado la(s) solucion(es) seleccionada(s)");
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar por lo menos una solución para realizar su exportación.");
            }
        }

        private void Inicio_Load(object sender, EventArgs e)
        {
            SolutionEntity se = new SolutionEntity(Comunes.Conexion);

            lbItems.DisplayMember = "Nombre";
            lbItems.ValueMember = "Idsolution";
            lbDestino.DisplayMember = "Nombre";
            lbDestino.ValueMember = "Idsolution";
            List<TESolution> soluciones = se.ListarSoluciones();
            foreach (TESolution sol in soluciones)
            {
                lbItems.Items.Add(sol);
            }

            // Vamos a ver si tenía soluciones seleccionadas en esta conexion, y si es asi removemos de origen y ponemos en destino.

            foreach (string sol in Comunes.Conexion.Soluciones)
            {
                bool encontrado = false;
                foreach (object item in lbItems.Items)
                {
                    TESolution solucion = (TESolution)item;

                    if (solucion.Nombre.ToLower() == sol.ToLower())
                    {
                        lbDestino.Items.Add(item);
                        lbItems.Items.Remove(item);
                        encontrado = true;
                        break;
                    }
                }

                if (!encontrado)
                {
                    Comunes.Conexion.Soluciones.Remove(sol);
                }
            }
        }

        private void add1_Click(object sender, EventArgs e)
        {
            for (int k = 0; k <= lbItems.SelectedItems.Count - 1; k++)
            {
                lbDestino.Items.Add(lbItems.SelectedItems[k]);
                Comunes.Conexion.Soluciones.Add(((TESolution)lbItems.SelectedItems[k]).Nombre);

            }
            for (int k = 0; k <= lbItems.SelectedItems.Count - 1; k++)
            {
                lbItems.Items.Remove(lbItems.SelectedItems[k]);
            }


        }

        private void btnRemoveOne_Click(object sender, EventArgs e)
        {
            for (int k = 0; k <= lbDestino.SelectedItems.Count - 1; k++)
            {
                lbItems.Items.Add(lbDestino.SelectedItems[k]);
                Comunes.Conexion.Soluciones.Remove(((TESolution)lbDestino.SelectedItems[k]).Nombre);

            }
            for (int k = 0; k <= lbDestino.SelectedItems.Count - 1; k++)
            {
                lbDestino.Items.Remove(lbDestino.SelectedItems[k]);

            }


        }

        private void btnAcerca_Click(object sender, EventArgs e)
        {
            About ab = new About();
            ab.ShowDialog();
        }

        private void Inicio_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.Exit();
        }
    }
}
